From a0e92a820ab4f9beb6ed7a6f0e88935d55cd3d93 Mon Sep 17 00:00:00 2001 From: robertl Date: Fri, 7 Feb 2003 17:22:10 +0000 Subject: [PATCH] Fix from Alex to deal with how I broke his code merging the new option handlers. --- gpsbabel/defs.h | 1 + gpsbabel/duplicate.c | 5 ++--- gpsbabel/filter_vecs.c | 32 +++++++++++++++++++++++--------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gpsbabel/defs.h b/gpsbabel/defs.h index c63bbac1d..6a87684e6 100644 --- a/gpsbabel/defs.h +++ b/gpsbabel/defs.h @@ -227,6 +227,7 @@ typedef struct filter_vecs { filter_init f_init; filter_process f_process; filter_deinit f_deinit; + arglist_t *args; } filter_vecs_t; void waypt_init(void); diff --git a/gpsbabel/duplicate.c b/gpsbabel/duplicate.c index 5b53acc2a..6626e24d6 100644 --- a/gpsbabel/duplicate.c +++ b/gpsbabel/duplicate.c @@ -193,8 +193,6 @@ duplicate_process(void) void duplicate_init(const char *args) { - const char *p; - duplicate_shortname = snopt != NULL; duplicate_location = lcopt != NULL; } @@ -207,5 +205,6 @@ duplicate_deinit(void) filter_vecs_t duplicate_vecs = { duplicate_init, duplicate_process, - duplicate_deinit + duplicate_deinit, + dup_args }; diff --git a/gpsbabel/filter_vecs.c b/gpsbabel/filter_vecs.c index f4c0c2ed4..e01ef8b07 100644 --- a/gpsbabel/filter_vecs.c +++ b/gpsbabel/filter_vecs.c @@ -58,16 +58,30 @@ find_filter_vec(char *const vecname, char **opts) char *svecname = strtok(v, ","); while (vec->vec) { - if (strcmp(svecname, vec->name) == 0) { - char * res = strchr(vecname, ','); - if (res) - *opts = strchr(vecname, ',')+1; - else - *opts = NULL; - free(v); - return vec->vec; + arglist_t *ap; + char *res; + + if (strcmp(svecname, vec->name)) { + vec++; + continue; } - vec++; + + res = strchr(vecname, ','); + if (res) { + *opts = strchr(vecname, ',')+1; + + if (vec->vec->args) { + for (ap = vec->vec->args; ap->argstring; ap++){ + *ap->argval = get_option(*opts, ap->argstring); + } + } + } else { + *opts = NULL; + } + + free(v); + return vec->vec; + } free(v); return NULL; -- 2.30.2